function fn(a:number):number{
    return a;
}

// 在定义函数或者类的时候，如果遇到类型不明确的就可以使用泛型，泛型其实就是一个不确定的类型


// <k>指定了一个泛型k
function fn2<k>(a:k):k{
return a;
}
// 使用方法

// 直接调用具有泛型的函数，这种是不指定泛型,会根据你传的值判断
fn2(10)
// 下面是指定泛型，下面也是调用函数，只是使用了泛型
fn2<string>("hello");


// 泛型可以指定多个
function fn3<o,p>(a:o,b:p):o{
    return a
}

// 泛型甚至可以继承接口
interface Inter{
    length:number;
}


// 如果a里面没有length就不行，a继承了这个接口
function fn4<T extends Inter>(a:T):number{
    return a.length;
}
// 参数a里面要有属性length，而且值为number
fn4({length:10})